home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue25 / survive / READER1.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1997-07-21  |  5.5 KB  |  213 lines

  1. unit Reader1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   DB, MyDS, StdCtrls;
  8.  
  9. type
  10.   PTestRec = ^TTestRec;
  11.   TTestRec = record
  12.       DelFlag: Byte;
  13.       EmpNo: SmallInt;
  14.       FirstName: string[15];
  15.       LastName: string[20];
  16.       HireDate: TDateTime;
  17.       DeptNo: string[3];
  18.       Salary: Double;
  19.     end;
  20.  
  21.   TForm1 = class(TForm)
  22.     Memo1: TMemo;
  23.     btnTest: TButton;
  24.     btnClose: TButton;
  25.     procedure btnTestClick(Sender: TObject);
  26.     procedure FormCreate(Sender: TObject);
  27.     procedure FormDestroy(Sender: TObject);
  28.     procedure btnCloseClick(Sender: TObject);
  29.   private
  30.   public
  31.     MyDataSet: TMyDataSet;
  32.     procedure DumpCurrentRec1;
  33.     procedure DumpCurrentRec2;
  34.   end;
  35.  
  36. var
  37.   Form1: TForm1;
  38.  
  39. implementation
  40.  
  41. {$R *.DFM}
  42.  
  43. procedure TForm1.DumpCurrentRec1;
  44. var
  45.   RecBuffer: TTestRec;
  46. begin
  47.   if MyDataSet.GetCurrentRecord(@RecBuffer) then
  48.     with RecBuffer do
  49.       Memo1.Lines.Add(Format('%3d %3d %-15s %-20s %10s %3s %11.0m',
  50.                              [MyDataSet.RecNo, EmpNo, FirstName,
  51.                               LastName, DateToStr(HireDate),
  52.                               DeptNo, Salary])
  53.                      );
  54. end;
  55.  
  56. procedure TForm1.DumpCurrentRec2;
  57. begin
  58.   with MyDataSet do begin
  59.     Memo1.Lines.Add(Format('%3d %3d %-15s %-20s %10s %3s %11.0m',
  60.                            [RecNo,
  61.                             IntToStr(FieldByName('EmpNo').AsInteger),
  62.                             FieldByName('FirstName').AsString,
  63.                             FieldByName('LastName').AsString,
  64.                             DateToStr(FieldByName('HireDate').AsDateTime),
  65.                             FieldByName('DeptNo').AsString,
  66.                             FieldByName('Salary').AsFloat])
  67.                    );
  68.   end;
  69. end;
  70.  
  71. procedure TForm1.btnTestClick(Sender: TObject);
  72. var
  73.   BookmarkA,
  74.   BookmarkB: TBookmark;
  75. begin
  76.   with MyDataSet do begin
  77.     TableName := 'TEST1.DAT';
  78.     RecordSize := SizeOf(TTestRec);
  79.     Open;
  80.     try
  81.       Memo1.Lines.Add('Active = ' + IntToStr(Ord(Active)));
  82.       Memo1.Lines.Add('RecordCount = ' + IntToStr(RecordCount));
  83.       Memo1.Lines.Add('RecordSize = ' + IntToStr(RecordSize));
  84.  
  85.       Memo1.Lines.Add('');
  86.       Memo1.Lines.Add('*** Read to EOF forwards ***');
  87.       First;
  88.       while not Eof do begin
  89.         DumpCurrentRec1;
  90.         Next;
  91.       end;
  92.  
  93.       Memo1.Lines.Add('');
  94.       Memo1.Lines.Add('*** Read to BOF backwards ***');
  95.       Last;
  96.       while not Bof do begin
  97.         DumpCurrentRec1;
  98.         Prior;
  99.       end;
  100.  
  101.       Memo1.Lines.Add('');
  102.       Memo1.Lines.Add('*** Test MoveBy ***');
  103.       First;
  104.       MoveBy(10);
  105.       DumpCurrentRec1;
  106.       MoveBy(-5);
  107.       DumpCurrentRec1;
  108.  
  109.       Memo1.Lines.Add('');
  110.       Memo1.Lines.Add('*** Test Bookmarks ***');
  111.       First;
  112.       MoveBy(10);
  113.       Memo1.Lines.Add('Goto this record and bookmark it:');
  114.       DumpCurrentRec1;
  115.       BookmarkA := GetBookmark;
  116.       try
  117.         MoveBy(-5);
  118.         Memo1.Lines.Add('Then move to a different record:');
  119.         DumpCurrentRec1;
  120.         BookmarkB := GetBookmark;
  121.         try
  122.           if BookmarkValid(BookmarkA) then begin
  123.             GotoBookmark(BookmarkA);
  124.             Memo1.Lines.Add('Then return to bookmarked record:');
  125.             DumpCurrentRec1;
  126.           end;
  127.  
  128.           Memo1.Lines.Add('Compare two different bookmarks (0=same, 1=different): ' +
  129.                           IntToStr(CompareBookmarks(BookmarkA, BookmarkB)));
  130.           Memo1.Lines.Add('Compare two identical bookmarks (0=same, 1=different): ' +
  131.                           IntToStr(CompareBookmarks(BookmarkA, BookmarkA)));
  132.           Memo1.Lines.Add('Compare two nil bookmarks (0=same, 1=different): ' +
  133.                           IntToStr(CompareBookmarks(nil, nil)));
  134.         finally
  135.           FreeBookmark(BookmarkB);
  136.         end;
  137.       finally
  138.         FreeBookmark(BookmarkA);
  139.       end;
  140.  
  141.       Memo1.Lines.Add('');
  142.       Memo1.Lines.Add('*** Test Insert ***');
  143.       Insert;
  144.       try
  145.         with PTestRec(ActiveBuffer)^ do begin
  146.           EmpNo := 444;
  147.           FirstName := 'NewGuy';
  148.           LastName := 'Inserted';
  149.           HireDate := Date;
  150.           DeptNo := '621';
  151.           Salary := 100000;
  152.         end;
  153.         Post;
  154.       except
  155.         Cancel;
  156.       end;
  157.       Last;
  158.       DumpCurrentRec1;
  159.  
  160.       Memo1.Lines.Add('');
  161.       Memo1.Lines.Add('*** Test Update ***');
  162.       Last;
  163.       Memo1.Lines.Add('Rec Before Update:');
  164.       DumpCurrentRec1;
  165.       Edit;
  166.       try
  167.         with PTestRec(ActiveBuffer)^ do
  168.           Salary := Salary + 1000;
  169.         Post;
  170.       except
  171.         Cancel;
  172.       end;
  173.       Memo1.Lines.Add('Rec After Update:');
  174.       DumpCurrentRec1;
  175.  
  176.       Memo1.Lines.Add('');
  177.       Memo1.Lines.Add('*** Test Delete ***');
  178.       First;
  179.       MoveBy(2);
  180.       Memo1.Lines.Add('Current Record Before Delete:');
  181.       DumpCurrentRec1;
  182.       Delete;
  183.       Memo1.Lines.Add('Current Record After Delete:');
  184.       DumpCurrentRec1;
  185.       MoveBy(-1);
  186.       Memo1.Lines.Add('Current Record Before Delete:');
  187.       DumpCurrentRec1;
  188.       Delete;
  189.       Memo1.Lines.Add('Current Record After Delete:');
  190.       DumpCurrentRec1;
  191.     finally
  192.       Close;
  193.     end;
  194.   end;
  195. end;
  196.  
  197. procedure TForm1.FormCreate(Sender: TObject);
  198. begin
  199.   MyDataSet := TMyDataSet.Create(Self);
  200. end;
  201.  
  202. procedure TForm1.FormDestroy(Sender: TObject);
  203. begin
  204.   MyDataSet.Free;
  205. end;
  206.  
  207. procedure TForm1.btnCloseClick(Sender: TObject);
  208. begin
  209.   Close;
  210. end;
  211.  
  212. end.
  213.